﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace TootlsBase.IFunction.IDBHelper
{
    /// <summary>
    ///基於.net（ 向下兼容4.0）開發 SQLServerDBHelper工具類接口
    ///<para>作者： 会害羞的青蛙</para>
    ///<para>時間： 2019-12-6</para>
    /// </summary>
    public interface ISQLServerDBHelper
    {
        /// <summary>
        /// 執行SQL語句返回DataTable
        /// </summary>
        /// <param name="SQL">SQL語句</param>
        /// <param name="DBUrl">數據庫鏈接地址</param>
        /// <returns></returns>
        DataTable GetDataTableBySQL(string SQL, string DBUrl);
        /// <summary>
        /// 執行非查詢的SQL語句
        /// </summary>
        /// <param name="SQL">SQL語句</param>
        /// <param name="DBUrl">數據庫鏈接地址</param>
        /// <returns></returns>
        int GetNonQueryBySQL(string SQL, string DBUrl);
        /// <summary>
        /// 執行多條SQL語句，實現數據庫事務。
        /// </summary>
        /// <param name="SQLStringList">多條SQL語句</param>        
        /// <param name="BDUrl">數據庫鏈接地址</param>     
        int GetNonQueryByManySQL(ArrayList SQLStringList, string BDUrl);
            /// <summary>
            /// 調用存儲返回單個結果集
            /// <para>obj使用方法：new{ v_data=value, v_data1=value1}</para>
            /// <para>注意：obj中v_data為存儲參數名稱，value為對應的值，在SQLServer中沒有游標所以不需要定義輸出參數</para>
            /// </summary>
            /// <param name="storageName">存儲名稱</param>
            /// <param name="DBUrl">數據庫鏈接地址</param>
            /// <param name="obj">存儲參數對象</param>
            /// <returns></returns>
        DataTable GetDataTableByStorageName(string storageName, string DBUrl, object obj);
        /// <summary>
        /// 調用存儲返回String字符串信息（最後一個位置必須為String類型字符，位置不能顛倒）
        /// <para>obj使用方法：new{ v_data=value, v_data1=value1,out_string=""}</para>
        /// <para>注意：obj中v_data為存儲參數名稱，value為對應的值，out_string為輸出參數不需要輸入值</para>
        /// </summary>
        /// <param name="storageName"></param>
        /// <param name="DBUrl"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        string GetStringDataByStorageName(string storageName, string DBUrl, object obj);
        /// <summary>
        /// 調用存儲返回String字符串信息和DataTable數據表格（最後一個為輸出字符串，位置不能顛倒）
        /// <para>obj使用方法：new{ v_data=value, v_data1=value1,out_string=""}</para>
        /// <para>注意：obj中v_data為存儲參數名稱，value為對應的值，out_string為輸出參數不需要輸入值， 在SQLServer中沒有游標所以不需要定義輸出參數</para>
        /// </summary>
        /// <param name="storageName">存儲名稱</param>
        /// <param name="DBUrl">數據庫鏈接地址</param>
        /// <param name="obj">存儲參數對象</param>
        /// <param name="dataTable">返回結果集</param>
        /// <returns></returns>
        string GetStringAndDataTableByStorageName(string storageName, string DBUrl, object obj, out DataTable dataTable);
       /// <summary>
        /// 以現有表格數據批量添加數據
        /// </summary>
        /// <param name="dt">數據表格</param>
        /// <param name="FormName">數據表名</param>
        /// <param name="DBUrl">數據庫鏈接地址</param>
        /// <returns></returns>
        bool AddInBatchesToDataTable(DataTable dt, string FormName, string DBUrl);
    }
}
